#ifndef _MUSIC_H_
#define _MUSIC_H_

#ifdef __cplusplus
extern "C"
{
#endif

#ifdef __cplusplus
}
#endif

#include <thread>
#include <string>
#include <mutex>
#include <string.h>
#include "MusicUI.h"

#include "MusicObj.h"
#include "lrc.h"

using namespace std;

class Music;

class Music
{
public:
private:
    thread *pThread;     // 独立于UI的线程
    bool threadExitFlag; // 线程退出标志
    mutex *ui_mutex;

    int musicNum; // 保存音乐数目
    int musicIndex = 0; // 当前播放音乐索引
    MusicObj *musicObj = nullptr; // 当前播放的音乐
    lyric_t *musicLyric = nullptr; // 当前播放音乐的歌词
    int musicLyricSentences = 0; // 当前播放音乐的歌词句数
    MusicUI::PlayMode musicMode = MusicUI::PlayMode_ListLoop; // 音乐播放模式

    int searchMusic(string path);
    int threadFunction(void);
    
    int getState(void);
    void pause(void);
    void play(const char *name, int index);
    void setCur(int cur_sec);
    void setMode(MusicUI::PlayMode mode);
    MusicUI::PlayMode getMode(void);
    void changeMusic(void);

public:
    Music(function<void(void)> exit_cb, mutex &UIMutex);
    ~Music();
};

#endif